package org.zjt.xiaofeng;


import java.io.IOException;

/**
 * 1、异常的结构
 *                                  thrawable
 *
 *                exception                                      error
 *
 *   checkedException   RuntimeException
 *
 *   checkedException： 编译时候检查，没有处理不能编译。需要开发者对次异常做特殊处理，通常是可恢复的。
 *   RuntimeException： 运行时候异常，逻辑错误。
 *   ERROR:             通常是程序运行，发生在jvm不常见异常。通常是我可修复的错误。例如： oom、 NoClassDeFoundError
 *
 * 2、异常的区别
 *
 *   Throwable：   可以抛出的，并且可以捕获处理的异常。必须要在编译时期处理。
 *   ERROR：       JVM级别的更加底层的异常。
 *   Exception：   程序运行时候出现的异常。
 *   checkedException：   编译时期必须处理的，运行时期是可恢复的异常。 IOException
 *   RuntimeException：   运行时候，由于业务逻辑错误的异常。
 *
 *
 * 3、异常的性能开销
 *
 *     抛出异常时候，保存当前的异常栈信息，所以性能损耗比较大。当程序变慢时候，应考虑异常是否增多
 *
 * 4、异常的处理
 *
 *      异常的处理必须精细化，不能同意拦截，这样的话，不利于系统诊断。
 *
 */
public class ExceptionLearning {

    public static void main(String[] args) {


        main2(args);
        try {
            main3(args);
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }

    }

    public static void main2(String[] args) throws RuntimeException {

    }


    public static void main3(String[] args) throws Throwable {

    }

}
